package org.springframework.security.provisioning;

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;

/**
 * @author Dillon
 * @date 2024/7/1
 * @slogan 致敬大师 致敬未来的你
 * @desc UserDetailsService 扩展接口，新增增删改查方法定义
 */
public interface UserDetailsManager extends UserDetailsService {

	/**
	 * 创建一个自定义用户
	 *
	 * @param user 自定义用户
	 */
	void createUser(UserDetails user);

	/**
	 * 更新自定义用户信息
	 *
	 * @param user 自定义用户
	 */
	void updateUser(UserDetails user);


	/**
	 * 移除自定义用户
	 *
	 * @param username 自定义用户名
	 */
	void deleteUser(String username);

	/**
	 * 更新自定义用户密码
	 * 在获取到自定义用户后，才能调用该方法
	 *
	 * @param oldPassword 旧密码
	 * @param newPassword 新密码
	 */
	void changePassword(String oldPassword, String newPassword);

	/**
	 * 判断当前系统中是否存在该自定义用户
	 *
	 * @param username 用户名
	 * @return 是否存在结果
	 */
	boolean userExists(String username);

}
